//读取信息，修改学生成绩
#include <stdio.h>
#include <stdlib.h>
#

// 定义一个学生的结构体
typedef struct {
    int ID;
    char name[20];
    int score;
} Student;

int main() {
    FILE *fp;
    char line[100];
    Student student;

    // 以文本方式打开文件
    if ((fp = fopen("file.txt", "r+")) == NULL) {
        fprintf(stderr, "Can't open file!\n");
        exit(1);
    }

    // 逐行读取文件内容，找到目标学生并修改信息
    while (fgets(line, sizeof(line), fp) != NULL) {
        // 将该行信息解析为一个学生结构体
        sscanf(line, "%d %s %d\n", &student.ID, student.name, &student.score);

        // 如果找到目标学生，则修改分数并将新的信息写回文件
        if (student.ID == 2 && strcmp(student.name, "Jack") == 0 && student.score == 80) {
            // 输出原来的学生信息
            printf("Original Student ID: %d\n", student.ID);
            printf("Original Student Name: %s\n", student.name);
            printf("Original Student Score: %d\n", student.score);

            // 修改成绩
            student.score = 90;

            // 将文件指针移动回原来的位置
            if (fseek(fp, -(long)strlen(line), SEEK_CUR) == 0) {
                // 将修改后的学生信息写回文件
                fprintf(fp, "%d %s %d\n", student.ID, student.name, student.score);
            }

            break;
        }
    }

    // 关闭文件
    fclose(fp);

    return 0;
}
